SQL - vyber neduplicitnich hodnot v jednom sloupci

Otázka od: Karel Pecinka

13. 10. 2004 11:23

Cau,
 
do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a
vse ostatni ma stejne.
 
Potreboval bych pomoci SQL vybrat vsechno zbozi pouze jednou a k tomu
vzdy posledni ID_Skupiny. Teoreticky si to muzu i prekopirovat do jine
tabulky jestli to necemu pomuze. Lze toto nejak udelat pouze pomoci 1
nebo vice SQL?
 
Diky
 
Karel

Odpovedá: Martin Cajbik

13. 10. 2004 11:45

SELECT EAN, Nazev, ..., MAX(ID_Skupiny)
   FROM Tabulka
   GROUP BY EAN, Nazev, ...

Martin Cajbik

Karel Pecinka wrote:
> Cau,
>
> do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
> V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
> zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a
> vse ostatni ma stejne.
>
> Potreboval bych pomoci SQL vybrat vsechno zbozi pouze jednou a k tomu
> vzdy posledni ID_Skupiny. Teoreticky si to muzu i prekopirovat do jine
> tabulky jestli to necemu pomuze. Lze toto nejak udelat pouze pomoci 1
> nebo vice SQL?
>
> Diky
>
> Karel


Odpovedá: Petr Brant

13. 10. 2004 11:53

Doufam, ze jsem to spravne pochopil. Delal jsem jednou neco podobneho,
situace byla takova, ze jsem mel v tabulce ID vozidla + dalsi udaje a hlavne
datum. Mel jsem najit vsechna vozidla u kterych neni vyplnena polozka
pic1name, ale jen ta, u kterych je nejvetsi datum. Udelal jsem ulozenou
proceduru (trochu jsem ji pro nazornost zde zjednodusil, ale princip je z
toho snad jasny)

RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz



CREATE PROCEDURE GET_VEH_POSITIONS
RETURNS (
    VEHID INTEGER,
    POSTIME TIMESTAMP)
AS
declare variable Vehgroup integer;
declare variable pic1name varchar (256);

begin
 vehgroup = -1;
 for select vehid, postimestamp, pic1name
  order by vehid, postimestamp descending into
  :vehid, :postime, :pic1name
 do
 begin
  if (vehgroup <> vehid) then /*neboli kdyz se meni ID vozidla*/
  begin
   vehgroup = :vehid;
   if (:pic1name = '') then suspend; /*v aktivnim zaznamu je id vozu,
souradnice a max. datum*/
  end
 end
end

 
do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a
vse ostatni ma stejne.
 
Potreboval bych pomoci SQL vybrat vsechno zbozi pouze jednou a k tomu
vzdy posledni ID_Skupiny. Teoreticky si to muzu i prekopirovat do jine
tabulky jestli to necemu pomuze. Lze toto nejak udelat pouze pomoci 1
nebo vice SQL?


Odpovedá: Jiri Cincura

13. 10. 2004 16:54

Karel Pecinka wrote:
> Cau,
>
> do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
> V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
> zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a vse
> ostatni ma stejne.
>

A distinct by nepomohlo?

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net
---
Nekdo vidi veci, ktere existuji, a pta se - proc?. Ja snim o vecech, ktere
nikdy neexistovaly a ptam se - proc ne? (Robert Kennedy)